<?php
class Arm_File_Csv
{

    /**
     * Парсинг csv файла, с учетом формата xls,
     * возвращает массив, коректно работает с utf-8,
     * Не пропускает значений ячеек.
     *
     * @param  string $string строка с csv данными
     * @param  stritn $delimiter разделитель
     * @param  string $enclosure ограничитель
     * @param  string $endString окончания строки метод автоматом определит нужный, если
     *                           не задан данный параметер при вызове.
     * @return array
     */
    public static function strGetCsv($string, $delimiter = ';', $enclosure = '"', $endString = null)
    {
        if($endString === null) {
        if(false === strpos($string, "\r")) {
            $endString = "\n";
        } else {
            $endString = "\r\n";
        }
        }
        
        $string = str_replace($enclosure . $enclosure, $enclosure, $string);
        $n = strlen($string);
        $i = $line = 0;
        $del = false;
        $str = '';
        while ($i < $n) {
            $part = substr($string, $i);
            
            if((substr($part, 0, 1) == $delimiter && ! $del) || (substr($part, 0, 2) ==
             $enclosure . $delimiter && $del)) {
                $i ++;
                if($del) {
                    $str = substr($str, 1, strlen($str) -
                     1);
                    $i ++;
                }
                $data[$line][] = $str;
                $del = false;
                $str = '';
            } else if(substr($part, 0, 2) == $endString) {
                $data[$line][] = $str;
                $str = '';
                $del = false;
                $line ++;
                $i += 2;
            } else {
                if($part[0] == $enclosure) {
                    $del = true;
                }
                $str .= $part[0];
                $i ++;
            }
        }
        return $data;
    }
}
